﻿using System;
using System.Collections.Generic;
using CthulhuDomain.GameEntities;
using CthulhuDomain.Services;
using Microsoft.Pex.Framework.Validation;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using Microsoft.Pex.Framework;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Input;
using CthulhuDomain;
using Microsoft.Xna.Framework;

namespace Invaders.Test
{
  //public partial class CollisionManagerFixture
  //{
  //  //[PexMethod]
  //  //[PexAllowedException(typeof(GamerServicesNotAvailableException))]
  //  //public void ShootIntersectDomainEntity_DomainEntityShouldBeRemovedFromMatrix()
  //  //{
  //  //  // Arrange
  //  //  var time = new GameTimeAdapter(new GameTime(new TimeSpan(0, 0, 0, 10), new TimeSpan(0, 0, 0, 20)));
  //  //  var keys = new[] { Keys.Space };
  //  //  var pRecAdapter = new RectangleAdapter(0, 0, 300, 100);
  //  //  var mRecAdapter = new RectangleAdapter(0, 0, 300, 100);

  //  //  var Efactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Cthulhu);
  //  //  var SutMatrix = new DomainEntityMatrix(Efactory, 3);
  //  //  var cManager = new ContentManagerAdapter(contentManager);
  //  //  SutMatrix.LoadContent(cManager, new RectangleAdapter(0, 0, 300, 280));

  //  //  var oldENum = SutMatrix.EntityCount();
  //  //  var Pfactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Player);
  //  //  var Pentity = Pfactory.CreateEntity(cManager);

  //  //  Pentity.Update(pRecAdapter, keys);
  //  //  Pentity.Move(pRecAdapter, keys);
  //  //  SutMatrix.Update(mRecAdapter, time);
  //  //  Pentity.Shoots[0].Position = SutMatrix.Matrix[2, 2].Position;

  //  //  // ACT
  //  //  CollisionManager.DetectCollision(SutMatrix, Pentity);

  //  //  // Assert
  //  //  Assert.IsTrue(SutMatrix.EntityCount() < oldENum, "after shoot collision Matrix element is not decreased");
  //  //}

  //  //[PexMethod]
  //  //[PexAllowedException(typeof(GamerServicesNotAvailableException))]
  //  //public ScoreManager.CollisionResult ShootIntersectDomainEntity_ShootShouldBeRemoved()
  //  //{
  //  //  // Arrange
  //  //  var time =new GameTimeAdapter(new GameTime(new TimeSpan(0, 0, 0, 10), new TimeSpan(0, 0, 0, 20)));
  //  //  var keys = new[] { Keys.Space };
  //  //  var pRecAdapter = new RectangleAdapter(0, 0, 300, 100);
  //  //  var mRecAdapter = new RectangleAdapter(0, 0, 300, 100);

  //  //  var Efactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Cthulhu);
  //  //  var SutMatrix = new DomainEntityMatrix(Efactory, 3);
  //  //  var cManager = new ContentManagerAdapter(contentManager);
  //  //  SutMatrix.LoadContent(cManager, new RectangleAdapter(0, 0, 300, 280));

  //  //  var Pfactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Player);
  //  //  var Pentity = Pfactory.CreateEntity(cManager);

  //  //  Pentity.Update(pRecAdapter, keys);
  //  //  Pentity.Move(pRecAdapter, keys);
  //  //  SutMatrix.Update(mRecAdapter, time);
  //  //  Pentity.Shoots[0].Position = SutMatrix.Matrix[2, 2].Position;

  //  //  // ACT
  //  //  var result = CollisionManager.DetectCollision(SutMatrix, Pentity);

  //  //  // Assert
  //  //  Assert.IsNull(Pentity.Shoots[0], "shoot after strike is not null");

  //  //  return result;
  //  //}

  //  //[PexMethod]
  //  //[PexAllowedException(typeof(GamerServicesNotAvailableException))]
  //  //public void ShootIntersectPlayer_PlayerLIfePoint_ShoudBeDecreased()
  //  //{
  //  //  // Arrange
  //  //  var time = new GameTimeAdapter(new GameTime(new TimeSpan(0, 0, 0, 10), new TimeSpan(0, 0, 0, 20)));
  //  //  var keys = new[] { Keys.Space };
  //  //  var pRecAdapter = new RectangleAdapter(0, 0, 300, 100);
  //  //  var mRecAdapter = new RectangleAdapter(0, 0, 300, 100);

  //  //  var Efactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Cthulhu);
  //  //  var SutMatrix = new DomainEntityMatrix(Efactory, 3);
  //  //  var cManager = new ContentManagerAdapter(contentManager);
  //  //  SutMatrix.LoadContent(cManager, new RectangleAdapter(0, 0, 300, 280));
  //  //  SutMatrix.Update(mRecAdapter, time);
  //  //  var Pfactory = DomainFactory.GetFactory(DomainFactory.eTypeEntity.Player);
  //  //  var Pentity = Pfactory.CreateEntity(cManager);

  //  //  Pentity.Update(pRecAdapter, keys);

  //  //  var oldPos = SutMatrix.Matrix[2, 2].Position;
  //  //  Shoot s = new Shoot(new Vector2Adapter(oldPos.X, oldPos.Y + SutMatrix.Matrix[2, 2].Height));

  //  //  Pentity.LifePoint = 3;


  //  //  Pentity.Position = s.Position;

  //  //  // ACT
  //  //  var result = CollisionManager.DetectCollision(SutMatrix, Pentity);

  //  //  // Assert
  //  //  //Assert.IsTrue(Pentity.Shoots[0], "shoot after strike is not null");

  //  //}
  //}
}
